/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mailserver;

import LibreriaServer.LServer;
import Persistencia.Archivo;
import SwConfMessage.Interfaz.IGuardarRecuperar;
import SwConfMessage.Interfaz.IMostrar;

import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Marisol
 */
public class Server implements IGuardarRecuperar , IMostrar{

    /**
     * Variables privadas de la clase
     */
    
    private ArrayList<String> listaServer;
    private String NameServer;
    
    
    /**
     * Constructor de la Clase
     */
    public Server() {
        listaServer= new ArrayList<String>();
        NameServer = "Servidor";
        try {
            String patch = LServer.patchServer();
            Archivo<Server> archivo = new Archivo<Server>();
           boolean existe = archivo.existe(patch, NameServer, LServer.Data);
           if (existe){
             recuperar();
             return;
           }
           guardar();
        } catch (Exception ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    }
    

/**
 * Function que devuelve la lista de servidores
 * @return lista de servidors
 */
    public ArrayList<String> getListaServer() {
        return listaServer;
    }
    
    
    
    /**
     * Metodo que guarda el Master server
     */
    @Override
    public void guardar() {
        try {
            String Pach = LServer.patchServer();
            Archivo<Server> binarioServer = new Archivo();
            binarioServer.guardar(this, Pach, NameServer, LServer.Data);
        } catch (Exception ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
//        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
    
    /**
     * Metodo que recupera el Master Server
     */
    @Override
    public void recuperar() {
       try {
              String Pach = LServer.patchServer();
            Archivo<Server> binarioServer = new Archivo<Server>();
           Server servidor =  binarioServer.recuperar(Pach, NameServer, LServer.Data);
           this.listaServer = servidor.listaServer;
           
        } catch (Exception ex) {
            Logger.getLogger(MailServer1.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    
    /**
     * Funcion que agrega  servidores
     * @param nameserver, nombre del servidor
     * @return 0 si se pudo agregar, -1 si ya existe
     * @throws Exception 
     */
    public int agregarServidor(String nameserver) throws Exception {
        
        if (!LServer.existeString(listaServer, nameserver)) {
            listaServer.add(nameserver);
            MailServer1 Servidor = new MailServer1(nameserver);
//            Servidor.guardar();
            guardar();
            return 0;
        }
        return -1;
    }

    
    /**
     * Funcion que retorna la lista de servidores
     * @return lista de servidores
     */
    @Override
    public String toString() {
       return LServer.Imprimir(listaServer);
    }
    
}
